package com.codeduck.guava.basic;

import com.google.common.collect.Ordering;
import com.google.common.primitives.Ints;

/**
 * Ordering: 是Guava 的“ fluent”Comparator 类，可用于构建复杂的比较器并将其应用于对象集合。
 * Ordering 类提供链接方法来调整和增强现有的比较器
 *
 * @author: <a href="mailto:codeduck@163.com">Codeduck</a>
 * @createDate: 2022-05-19
 */
public class Demo04 {
    public static void main(String[] args) {

        /**
         * 通过静态方法创建比较器
         */
        // 对 Comparable 类型使用自然排序。
        Ordering<Comparable> natural = Ordering.natural();

        // 通过 toString ()返回的对象的字符串表示形式的字典排序比较对象。
        Ordering<Object> objectOrdering = Ordering.usingToString();


        /**
         * 直接扩展 Ordering 抽象类:
         */
        Ordering<String> byLengthOrdering = new Ordering<String>() {
            public int compare(String left, String right) {
                return Ints.compare(left.length(), right.length());
            }
        };

        /**
         * Chaining: 一个给定的Ordering可以被包装以获得派生的排序。一些最常用的变体包括
         */
        // 正常比较
        byLengthOrdering.compare("12", "123"); // return -1;

        // 返回相反的排序。
        byLengthOrdering.reverse().compare("12", "123"); // return 1

    }
}
